package com.atguigu.tingshu.album.service.impl;

import com.atguigu.tingshu.album.mapper.AlbumStatMapper;
import com.atguigu.tingshu.album.mapper.TrackStatMapper;
import com.atguigu.tingshu.album.service.MqOpsService;
import com.atguigu.tingshu.common.constant.SystemConstant;
import com.atguigu.tingshu.common.execption.GuiguException;
import com.atguigu.tingshu.vo.album.TrackStatMqVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * Description:
 *
 * @author Yanxinhao on 2025/2/5
 */
@Slf4j
@Service
public class MqOpsServiceImpl implements MqOpsService {

    @Autowired
    private AlbumStatMapper albumStatMapper;

    @Autowired
    private TrackStatMapper trackStatMapper;

    /**
     * 更新播放量、增加订阅量、收藏量...
     * 消费消息，针对专辑和音频的统计维度进行数据更新
     * @param trackStatMqVo 参数
     */
    @Override
    public void listenAlbumAndTrackStatNumUpdate(TrackStatMqVo trackStatMqVo) {
        try {
            Long albumId = trackStatMqVo.getAlbumId();
            Long trackId = trackStatMqVo.getTrackId();
            Integer count = trackStatMqVo.getCount();

            //1.判断albumId是否为空，如果albumId为空则说明是只更新音频的收藏统计数据，因为专辑没有收藏量这条数据
            if (albumId == null){
                //修改音频统计数据
                int j = trackStatMapper.updateStatNum(trackId, trackStatMqVo.getStatType(),count);
                log.info("修改音频统计数据【收藏量】 结果：{}，收藏量数据:{}",j>0, count);
            } else {
                //2.若albumID不为空，那么就专辑和音频都需要更新数据
                //修改专辑统计数据
                int i = albumStatMapper.updateStatNum(albumId,trackStatMqVo.getStatType(),count);
                log.info("修改专辑统计数据【播放量】 +1 结果：{}",i>0);
                //修改音频统计数据
                int j = trackStatMapper.updateStatNum(trackId, SystemConstant.TRACK_STAT_PLAY,count);
                log.info("修改音频统计数据【播放量】 +1 结果：{}",j>0);
            }


        } catch (Exception e) {
            throw new GuiguException(201,"【listenAlbumAndTrackStatNumUpdate】消息消费过程发生异常");
        }
    }
}